package com.funong.matrix.biz.system.facade;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.funong.matrix.biz.base.entity.SysFileBusinessEntity;
import com.funong.matrix.biz.base.entity.SysFileInfoEntity;
import com.funong.matrix.biz.system.pojo.dto.FileBaseInfoDTO;
import com.funong.matrix.biz.system.pojo.dto.FileBusinessRelationDTO;
import com.funong.matrix.biz.system.pojo.dto.FileDTO;
import com.funong.matrix.core.dto.Result;
import com.funong.matrix.core.enums.FileCategoryType;

import java.util.List;
import java.util.Map;

/**
 * @author : NaNa
 * @since : 2023-05-26 18:20
 **/
public interface SysFileFacade {
    SysFileInfoEntity saveFileInfo(FileBaseInfoDTO fileBaseInfoDTO);

    public List<SysFileInfoEntity> getFileListByIds(List<Integer> fileIdList);

    public Result recordFileRelation(FileBusinessRelationDTO relationDTO);

    /**
     * 删除文件关系信息
     *
     * @param bizId        来源ID
     *                     {@link FileCategoryType}
     * @param categoryType 业务文件类型
     */
    public void deleteFileRelation(Integer bizId, String categoryType);

    /**
     * 废弃文件关系信息，改状态为无效
     *
     * @param bizId        来源ID
     *                     {@link FileCategoryType}
     * @param categoryType 业务文件类型
     */
    public void dropFileRelation(Integer bizId, String categoryType, String memo);


    /**
     * 废弃文件关系信息，改状态
     *
     * @param bizId                来源ID
     *                             {@link FileCategoryType}
     * @param fileCategoryTypeList 业务文件类型
     * @param statusEnum           状态（驳回只更新文件状态为无效，isdeleted=0，未删除）
     */
    public List<SysFileInfoEntity> getFileInfoByBizIdAndType(Integer bizId,
                                                             List<String> fileCategoryTypeList,
                                                             Integer statusEnum);

    /**
     * 根据来源ID、附件类型，查询附件信息
     *
     * @param bizId                来源ID
     * @param fileCategoryTypeList 附件类型集合
     * @return 附件信息
     */
    public Map<String, List<SysFileInfoEntity>> getFileMapByBizIdAndType(Integer bizId, List<String> fileCategoryTypeList, Integer status);

    public SysFileBusinessEntity saveFileBusiness(SysFileBusinessEntity sysFileBusinessEntity);

    public Integer queryFileCount(SysFileBusinessEntity sysFileBusinessEntity);

    public void updateFileBusiness(SysFileBusinessEntity sysFileBusinessEntity);

    public List<SysFileBusinessEntity> queryFileBusinessList(SysFileBusinessEntity sysFileBusinessEntity);

    public IPage<SysFileBusinessEntity> queryContractFile(Page page, SysFileBusinessEntity sysFileBusinessEntity);

    /**
     * 保存文件关系
     *
     * @param bizModule
     * @param bizId
     * @param bizCategory
     * @param fileList
     */
    void saveFileBusiness(String bizModule, Integer bizId, String bizCategory, List<FileDTO> fileList);

    /**
     * 查询文件列表
     *
     * @param bizModule
     * @param bizId
     * @param bizCategory
     * @return
     */
    List<SysFileInfoEntity> queryFileInfo(String bizModule, Integer bizId, String bizCategory);
}
